{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# W3_冯炳驹_124298228"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第五步_3：调整正则化参数：reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#导入库\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nrR4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fce4c0b7f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('interest_level');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# drop ids and get labels\n",
    "y_train = train['interest_level']\n",
    "\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 9\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    print(\"best n_estimators: %i\" %(n_estimators))\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    #train_predprob = alg.predict_proba(X_train)\n",
    "    #logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "   # print (\"logloss of train :\" )\n",
    "   # print logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.1, 0.5, 0.8, 1.0, 1.3], 'reg_lambda': [1, 2, 3]}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [0.1, 0.5, 0.8, 1.0, 1.3]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [1,2,3]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=6, min_child_weight=0.5, missing=None, n_estimators=192,\n",
       "       n_jobs=1, nthread=4, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=3, silent=True,\n",
       "       subsample=0.8),\n",
       "       fit_params={}, iid=True, n_jobs=4,\n",
       "       param_grid={'reg_alpha': [0.1, 0.5, 0.8, 1.0, 1.3], 'reg_lambda': [1, 2, 3]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=192,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=0.5,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        nthread=4,\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=4, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:667: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.57958, std: 0.00230, params: {'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  mean: -0.57926, std: 0.00152, params: {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  mean: -0.57990, std: 0.00198, params: {'reg_alpha': 0.1, 'reg_lambda': 3},\n",
       "  mean: -0.58036, std: 0.00177, params: {'reg_alpha': 0.5, 'reg_lambda': 1},\n",
       "  mean: -0.57932, std: 0.00194, params: {'reg_alpha': 0.5, 'reg_lambda': 2},\n",
       "  mean: -0.57937, std: 0.00204, params: {'reg_alpha': 0.5, 'reg_lambda': 3},\n",
       "  mean: -0.57956, std: 0.00238, params: {'reg_alpha': 0.8, 'reg_lambda': 1},\n",
       "  mean: -0.57880, std: 0.00198, params: {'reg_alpha': 0.8, 'reg_lambda': 2},\n",
       "  mean: -0.57970, std: 0.00212, params: {'reg_alpha': 0.8, 'reg_lambda': 3},\n",
       "  mean: -0.57975, std: 0.00158, params: {'reg_alpha': 1.0, 'reg_lambda': 1},\n",
       "  mean: -0.57919, std: 0.00240, params: {'reg_alpha': 1.0, 'reg_lambda': 2},\n",
       "  mean: -0.57951, std: 0.00192, params: {'reg_alpha': 1.0, 'reg_lambda': 3},\n",
       "  mean: -0.57911, std: 0.00223, params: {'reg_alpha': 1.3, 'reg_lambda': 1},\n",
       "  mean: -0.57894, std: 0.00194, params: {'reg_alpha': 1.3, 'reg_lambda': 2},\n",
       "  mean: -0.57972, std: 0.00207, params: {'reg_alpha': 1.3, 'reg_lambda': 3}],\n",
       " {'reg_alpha': 0.8, 'reg_lambda': 2},\n",
       " -0.57879597078771661)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 152.55778399,  150.62958016,  151.95240817,  146.98926411,\n",
       "         150.55017786,  156.87048931,  157.24912391,  147.67703905,\n",
       "         141.48035474,  149.09922132,  145.24106331,  146.95341811,\n",
       "         149.85583382,  147.5316515 ,  125.62778478]),\n",
       " 'mean_score_time': array([ 0.68132339,  0.68155136,  0.72195382,  0.70320072,  0.66257172,\n",
       "         0.67834964,  0.70507393,  0.69905977,  0.70788293,  0.71690745,\n",
       "         0.73415327,  0.69885926,  0.68422022,  0.71028972,  0.6399076 ]),\n",
       " 'mean_test_score': array([-0.57958109, -0.57926316, -0.57990114, -0.5803598 , -0.57931533,\n",
       "        -0.57936856, -0.5795647 , -0.57879597, -0.57969915, -0.5797472 ,\n",
       "        -0.57918695, -0.57951034, -0.57911141, -0.57894417, -0.57971907]),\n",
       " 'mean_train_score': array([-0.46808618, -0.47247929, -0.47548575, -0.46852532, -0.47325426,\n",
       "        -0.4754389 , -0.46955227, -0.47383933, -0.47681994, -0.47062464,\n",
       "        -0.4740816 , -0.47768145, -0.47226816, -0.47638525, -0.47922553]),\n",
       " 'param_reg_alpha': masked_array(data = [0.1 0.1 0.1 0.5 0.5 0.5 0.8 0.8 0.8 1.0 1.0 1.0 1.3 1.3 1.3],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False],\n",
       "        fill_value = ?),\n",
       " 'param_reg_lambda': masked_array(data = [1 2 3 1 2 3 1 2 3 1 2 3 1 2 3],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False],\n",
       "        fill_value = ?),\n",
       " 'params': ({'reg_alpha': 0.1, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.1, 'reg_lambda': 3},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.5, 'reg_lambda': 3},\n",
       "  {'reg_alpha': 0.8, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.8, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.8, 'reg_lambda': 3},\n",
       "  {'reg_alpha': 1.0, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.0, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1.0, 'reg_lambda': 3},\n",
       "  {'reg_alpha': 1.3, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.3, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1.3, 'reg_lambda': 3}),\n",
       " 'rank_test_score': array([10,  5, 14, 15,  6,  7,  9,  1, 11, 13,  4,  8,  3,  2, 12]),\n",
       " 'split0_test_score': array([-0.575445  , -0.57643614, -0.57685658, -0.57768032, -0.57571001,\n",
       "        -0.57585471, -0.57602789, -0.5754071 , -0.57638978, -0.57715612,\n",
       "        -0.57472167, -0.57657886, -0.57511687, -0.57610081, -0.57663642]),\n",
       " 'split0_train_score': array([-0.46814452, -0.47286579, -0.4761918 , -0.46982776, -0.47327102,\n",
       "        -0.47652372, -0.47031259, -0.47523708, -0.47841526, -0.47203823,\n",
       "        -0.47518635, -0.47859569, -0.47341086, -0.47844671, -0.48166685]),\n",
       " 'split1_test_score': array([-0.57962893, -0.57961766, -0.57982155, -0.58132919, -0.57956872,\n",
       "        -0.57909776, -0.57988542, -0.57909176, -0.58013828, -0.57978289,\n",
       "        -0.57968153, -0.5789152 , -0.57936576, -0.57980162, -0.58018564]),\n",
       " 'split1_train_score': array([-0.46677769, -0.47212787, -0.47377886, -0.46793506, -0.47189971,\n",
       "        -0.47489196, -0.46809669, -0.47227998, -0.47534698, -0.4691529 ,\n",
       "        -0.47324575, -0.47609488, -0.47105023, -0.47555546, -0.47783305]),\n",
       " 'split2_test_score': array([-0.58030461, -0.57972484, -0.57984952, -0.58017453, -0.57991086,\n",
       "        -0.58098873, -0.57943172, -0.57992303, -0.57996408, -0.58021933,\n",
       "        -0.57993508, -0.5806897 , -0.58036624, -0.57893717, -0.58008829]),\n",
       " 'split2_train_score': array([-0.47054178, -0.47476925, -0.47806251, -0.47027032, -0.47546844,\n",
       "        -0.47780378, -0.47145005, -0.47695979, -0.47825552, -0.47405475,\n",
       "        -0.47657279, -0.48050406, -0.47472784, -0.47856111, -0.48084231]),\n",
       " 'split3_test_score': array([-0.58251263, -0.58104978, -0.58311471, -0.58299146, -0.58159933,\n",
       "        -0.58175524, -0.58347677, -0.581329  , -0.58297866, -0.58208885,\n",
       "        -0.58200541, -0.58231576, -0.58178173, -0.58194257, -0.58297546]),\n",
       " 'split3_train_score': array([-0.46744909, -0.4696632 , -0.4739782 , -0.46668207, -0.47188152,\n",
       "        -0.4729525 , -0.46887026, -0.47235481, -0.47565492, -0.46902247,\n",
       "        -0.47231524, -0.4762115 , -0.47066046, -0.47406919, -0.47695958]),\n",
       " 'split4_test_score': array([-0.58001442, -0.57948743, -0.57986334, -0.57962325, -0.57978786,\n",
       "        -0.57914628, -0.57900151, -0.57822879, -0.57902476, -0.57948873,\n",
       "        -0.5795912 , -0.57905205, -0.57892638, -0.57793835, -0.57870926]),\n",
       " 'split4_train_score': array([-0.46751779, -0.47297036, -0.47541736, -0.46791137, -0.47375064,\n",
       "        -0.47502254, -0.46903176, -0.47236497, -0.47642704, -0.46885486,\n",
       "        -0.47308785, -0.47700113, -0.47149138, -0.47529377, -0.47882587]),\n",
       " 'std_fit_time': array([  2.52301447,   1.81910443,   1.36493129,   2.12809816,\n",
       "          1.83657661,   2.24504671,   2.80921989,   4.3543323 ,\n",
       "          5.15102471,   1.22721799,   3.48457122,   2.26204498,\n",
       "          0.38063701,   1.60422284,  18.33578242]),\n",
       " 'std_score_time': array([ 0.0306219 ,  0.02545087,  0.01822358,  0.0139775 ,  0.04593195,\n",
       "         0.03795644,  0.05609271,  0.03546331,  0.0246664 ,  0.04307474,\n",
       "         0.01652883,  0.04195396,  0.02421886,  0.01768344,  0.09101253]),\n",
       " 'std_test_score': array([ 0.00229853,  0.00152144,  0.0019803 ,  0.00176763,  0.00194207,\n",
       "         0.00203923,  0.00237709,  0.00197895,  0.00211784,  0.00158043,\n",
       "         0.00240216,  0.00191938,  0.0022254 ,  0.00194025,  0.00207275]),\n",
       " 'std_train_score': array([ 0.00130188,  0.00165459,  0.00157029,  0.00133148,  0.0013318 ,\n",
       "         0.00163854,  0.00118612,  0.00192354,  0.00128742,  0.00207986,\n",
       "         0.00156414,  0.00166996,  0.00155095,  0.00180156,  0.00177805])}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.578796 using {'reg_alpha': 0.8, 'reg_lambda': 2}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fce7e64828>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_lambda' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
